package demo5

// 代理设计模式。类似钩子方法

type Subject interface {
	Do() string
}

type RealSubject struct{}

func (RealSubject) Do() string {
	return "real"
}

type Proxy struct {
	real RealSubject
}

func (p Proxy) Do() string {
	var res string
	// 执行之前 的一些工作类似钩子方法
	res += "pre:"
	// 调用真实的对象
	res += p.real.Do()
	// 调用之后
	res += ":after"
	return res
}
